#!/usr/bin/env python3
"""
图片提取和下载脚本
从HTML文件中提取指定结构的图片链接并下载
"""

import os
import requests
from bs4 import BeautifulSoup
from urllib.parse import urljoin
import time

def extract_and_download_images(html_file_path, base_url=None, output_dir="downloaded_images"):
    """
    从HTML文件中提取指定结构的图片链接并下载
    
    Args:
        html_file_path (str): HTML文件路径
        base_url (str, optional): 图片的基础URL，如果图片路径是相对路径则需要提供
        output_dir (str): 图片保存目录
    """
    # 确保输出目录存在
    if not os.path.exists(output_dir):
        os.makedirs(output_dir)
        print(f"创建目录: {output_dir}")
    
    # 读取HTML文件
    try:
        with open(html_file_path, 'r', encoding='utf-8') as file:
            html_content = file.read()
    except Exception as e:
        print(f"读取HTML文件失败: {e}")
        return
    
    # 使用BeautifulSoup解析HTML
    soup = BeautifulSoup(html_content, 'html.parser')
    
    # 查找所有class为"cpxqBox1"的div
    cpxq_boxes = soup.find_all('div', class_='cpxqBox1')
    
    if not cpxq_boxes:
        print("未找到class为'cpxqBox1'的div元素")
        return
    
    # 提取图片链接
    image_links = []
    for box in cpxq_boxes:
        # 在每个cpxqBox1中查找img标签
        img_tags = box.find_all('img')
        for img in img_tags:
            src = img.get('src')
            if src:
                # 如果提供了base_url且src是相对路径，则构建完整URL
                if base_url and not src.startswith(('http://', 'https://')):
                    src = urljoin(base_url, src)
                image_links.append(src)
    
    if not image_links:
        print("未找到任何图片链接")
        return
    
    print(f"找到 {len(image_links)} 个图片链接")
    
    # 下载图片
    for i, img_url in enumerate(image_links, 1):
        try:
            print(f"正在下载图片 {i}/{len(image_links)}: {img_url}")
            
            # 获取图片文件名
            img_name = os.path.basename(img_url)
            if not img_name:
                img_name = f"image_{i}.jpg"
            
            # 完整的保存路径
            save_path = os.path.join(output_dir, img_name)
            
            # 如果文件已存在，添加时间戳避免覆盖
            if os.path.exists(save_path):
                name, ext = os.path.splitext(img_name)
                timestamp = int(time.time())
                img_name = f"{name}_{timestamp}{ext}"
                save_path = os.path.join(output_dir, img_name)
            
            # 下载图片
            response = requests.get(img_url, stream=True)
            response.raise_for_status()
            
            # 保存图片
            with open(save_path, 'wb') as f:
                for chunk in response.iter_content(1024):
                    f.write(chunk)
            
            print(f"图片已保存到: {save_path}")
            
        except Exception as e:
            print(f"下载图片失败: {img_url}, 错误: {e}")
    
    print("图片下载完成")

if __name__ == "__main__":
    # HTML文件路径
    html_file = "/Users/apple/project/uv_basic/prodes.html"
    
    # 如果图片使用相对路径，请提供基础URL
    # 例如: "https://www.example.com"
    base_url = "https://www.example.com"  # 请根据实际网站修改这个URL
    
    # 输出目录
    output_directory = "/Users/apple/project/uv_basic/downloaded_images"
    
    # 执行提取和下载
    extract_and_download_images(html_file, base_url, output_directory)